// 引入 koa 构建 http server
const Koa = require('koa');
const koaStaticCache = require('koa-static-cache');
// 导入 socket server 类 来构建 websocket server
const { Server } = require("socket.io");
// 引入 node.js 中的 http
const http = require('http');



// 使用 koa 创建一个 webserver
const koa = new Koa();
koa.use(koaStaticCache({
    prefix: '/public',
    dir: './public'
}));


// 使用 http 来构建 webserver
const app = http.createServer();
// 要使用 http 的server去构建监听服务，但是请求以后的业务要使用koa来处理
app.on('request', koa.callback());

const io = new Server(app);
// socket: 当有客户端通过 websocket 协议连接到当前 io 服务器以后，会创建一个 socket 的对象，这个对象里面提供（维护）了服务端对象与客户端对象的数据 socket: {io, client}，这样的话，每一个客户端和服务端的链接就会产生一个唯一的 socket对象
io.on('connection', (socket) => {
    // websocket 链接走这里
    // console.log('有请求了')

    socket.on('chat message', (msg) => {
        console.log('message: ' + msg);

        let d = new Date();
        let messageData = {
            msg,
            datetime: `${d.getFullYear()}年${d.getMonth()+1}月${d.getDate()}日 ${d.getHours()}:${d.getMinutes()}:${d.getSeconds()}`
        }
        // socket.emit 发送消息到当前的 socket 这个客户端上
        socket.emit('message', messageData);

        // 广播到其它的（不包含当前socket) 客户端
        socket.broadcast.emit('message', messageData);
    });
})


// 监听端口
app.listen(8888);
